#include <iostream>
#include <ctime>
#include <memory>
#include <stdlib.h>
#include "Task.h"
#include "ThreadPool.h"

using namespace std;

class MyTask : public Task{
public:
virtual void process() override{
    srand(clock());
    int number = rand() % 100;
    cout << ">>MyTask process number =" << number <<endl;
}

};
void test(){
   /*1.当主线程快的时候，在stop函数中会将_isExit设置为true，并且等待着子线程，然后当子线程调用
   process执行完任务再走dotask的while循环发现isExit已经被设置为true了，所以子线程就进不去了，那么
   主线程就会回收子线程，程序正常结束
   2.当子线程快的时候，将任务处理完之后已经在循环内卡在pop()那里等待主线程给新的任务，即使现在主线程
   将标志位设置为true也没有用了程序还是会卡死在那里*/
   unique_ptr<Task> ptask(new MyTask());
   ThreadPool pool(4,10);
   pool.start();
   int cnt =20;
   while(cnt--){
    pool.addTask(ptask.get());
    cout << "cnt =" << cnt << endl;
   }
   pool.stop();
}
int main()
{
    test();
    return 0;
}

